常见滤波器简要对比介绍及Matlab实现

您所在的位置:网站首页 贝塞尔曲线 matlab 常见滤波器简要对比介绍及Matlab实现

常见滤波器简要对比介绍及Matlab实现

2024-07-12 03:41| 来源: 网络整理| 查看: 265

 

 

 

                                   常见滤波器简要介绍及Matlab实现

             简要收集关于“椭圆、切比雪夫、巴特沃斯、贝塞尔”滤波器的使用与特点,不完善之处还请提出意见与谅解!

1.椭圆滤波器Elliptic Filter

①椭圆滤波器又称考尔滤波器(Cauer filter),是在通带和阻带等波纹特性的一种滤波器,因此通带,阻带逼近特性良好。 

                                                      

②相较其他类型的滤波器,椭圆滤波器在阶数相同的条件下有着最小的通带和阻带波动。

③相比其他滤波器其阻带下降最快,过渡带更为陡峭、更窄的特性(通带和阻带的起伏为代价来换取)。相同阶数时,椭圆滤波      器的幅频曲线下降最陡,其次为切比雪夫滤波器,再次为巴特沃斯滤波器,下降最平缓的为贝塞尔滤波器。

                                                        

 

Matlab实现方法:

[n,Wn]=ellipord(wp,ws,Rp,Rs);

椭圆滤波器最小阶数n和截止频率Wn的确定函数,并使滤波器在通带内(0 , Wp)的波纹系数小于通带最大衰减 R p ,阻带内(W s , 1)的波纹系数大于阻带最小衰减 R s 。Rp、Rs分别为通带最大波纹和阻带最小衰减;wp、ws分别为为通带边界频率和阻带边界频率,单位为rad/s。这四个参数为滤波器的基本性能指标.

[ b, a] = ellip(n , R p , R s , Wn);

函数的功能是设计滤波器 ,参n表示最小阶数,参数R p表示通带最大波纹度(单位dB),参数R s表示阻带最小衰减(单位dB),参数Wn表示归一化的低通滤波器截止频率(如果阶数n与截止频率不由ellipord计算,可以假设截止频率为F,则有Wn =F/(Fs/2)=F*2/Fs)。

  如 : 设计一个带通椭圆数字滤波器 , 通带为 100 ~200 H z,过渡带均为 50 H z,通带波纹小于 3 db ,阻带衰减为 30 db ,采样频       率 f s =1 000 H z 。其程序为 : 

fs = 1000 ; Rp =3; Rs =30 ; Wp =2 *[ 100 200] /fs; W s = 2 *[ 80 220] /f s; [ n , W n] = ellipo rd (Wp , W s , Rp , Rs); [ b , a] = ellip(n , Rp, Rs Wn); dataOut = filter(b,a,dataIn); 2.巴特沃斯滤波器

① 巴特沃斯滤波器是一种在通带和阻带都平坦的滤波器,通带率响应曲线最平坦,没有起伏,阻带频带则逐渐下降为零,下降慢,在过渡带上很容易造成失真。

②在振幅对数与角频率的波特图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大。

③一阶巴特沃斯滤波器的衰减率为每倍频6分贝,每十倍频20分贝。二阶巴特沃斯滤波器的衰减率为每倍频12分贝,三阶巴特沃斯滤波器的衰减率为每倍频18分贝,如此类推。

④巴特沃斯滤波器的频率特性曲线,无论在通带内还是阻带内都是频率的单调函数。因此,当通带的边界处满足指标要求时,通带内肯定会有裕量。所以,更有效的设计方法应该是将精确度均匀的分布在整个通带或阻带内,或者同时分布在两者之内。这样就可用较低阶数的系统满足要求。

                                                       

 下图是巴特沃斯滤波器(左上)和同阶第一类切比雪夫滤波器(右上)、第二类切比雪夫滤波器(左下)、椭圆函数滤波器(右下)的频率响应图。

                                                       

巴特沃斯低通滤波器可用如下振幅的平方对频率的公式表示:

巴特沃斯低通滤波器可用如下振幅的平方对频率的公式表示:

https://gss3.bdstatic.com/7Po3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D262/sign=7cfeb09ab64543a9f11bfdca2c168a7b/10dfa9ec8a136327ad37ac5d908fa0ec09fac782.jpg

其中, https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D9/sign=a4edf55f4d086e066ea8337a02d226/adaf2edda3cc7cd991645db73801213fb80e9116.jpg = 滤波器的阶数

https://gss2.bdstatic.com/-fo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D18/sign=8937e54cc9fcc3ceb0c0cd3b92456038/10dfa9ec8a136327acf7ab5d908fa0ec08fac742.jpg = 截止频率 = 振幅下降为 -3分贝时的频率

wp= 通频带边缘频率

https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D118/sign=66adce1bd788d43ff4a995f3451fd2aa/aa64034f78f0f736356d256f0b55b319eac413c8.jpg 在通频带边缘的数值 

说明:buttord函数使用阻带指标计算3dB截止频率,这样阻带会刚好满足要求,而通带会有富余。

% [B,A] = butter(N,Wn,'high') ---用来设计高通滤波器 % [B,A] = butter(N,Wn,'low') --低通滤波器 [B,A] = butter(N,Wn)--带通滤波器 out_sign=filter(B,A,x_sign); %输入信号最好是转化为double型

为了确定滤波器的最小阶数N,通过[N,Wn]=buttord(Wp,Ws,Rp,Rs)函数获得 。

完整示例8-30Hz带通滤波: fs = 1000 ; %信号的采样频率 wp=[8 30]*2/fs; %通带边界频率 ,单位为rad/s ws=[7 32]*2/fs; %阻带边界频率 ,单位为rad/s Rp=1; %通带最大波纹度 ,单位dB (不要太小) Rs=30; %表示阻带最小衰减,单位dB [N,Wn]=buttord(Wp,Ws,Rp,Rs);  %巴特沃斯数字滤波器的阶数n和-3dB归一化截止频率Wn [B,A]=butter(N,Wn);  %得到n阶巴特沃斯滤波的分子分母 dataOut = filter(B,A,dataIn); 3.切比雪夫滤波器

①切比雪夫滤波器是在通带或阻带上频率响应幅度等波纹波动(通带平坦、阻带等波纹或是阻带平坦、通带等波纹)的滤波器,振幅特性在通带内是等波纹。    

                 

                         

 

②切比雪夫滤波器在过渡带比巴特沃斯滤波器的衰减快,但频率响应的幅频特性不如后者平坦。

③切比雪夫滤波器和理想滤波器的频率响应曲线之间的误差最小,但是在通频带内存在幅度波动。

④在通带(或称“通频带”)上频率响应幅度等波纹波动的滤波器称为“I型切比雪夫滤波器”,在阻带(或称“阻频带”)上频率响应幅度等波纹波动的滤波器称为“II型切比雪夫滤波器”

                                                          https://img-blog.csdn.net/20161011211556307

 

fs = 1000; % Hz采样频率 wp = 55/(fs/2); %通带截止频率,取50~100中间的值,并对其归一化 ws = 90/(fs/2); %阻带截止频率,取50~100中间的值,并对其归一化 Rp = 3; %通带允许最大衰减为 db Rs = 40; %阻带允许最小衰减为 db [n,Wn]=cheb1ord(Wp,Ws,Rp,Rs); % 获取阶数和截止频率 [b,a]=cheby1(n,Rp,Wn, 'low'); %获得转移函数系数 dataOut = filter(b,a,dataIn); %信号滤波运算 4.贝塞尔滤波器Bessel filter

          贝赛尔(l)滤波器是具有最大平坦的群延迟(线性相位响应)的线性过滤器,即最平坦的幅度和相位响应,常用在音频天桥系统中。具有最平坦的幅度和相位响应。带通(通常为用户关注区域)的相位响应近乎呈线性。

      由于具有向其截止频率以下的所有频率提供等量延时的特性,才被用于音频设备中,在音频设备中,必须在不损害频带内多信号的相位关系前提下,消除带外噪声。另外,贝塞尔滤波器的阶跃响应很快,并且没有过冲或振铃,这使它在作为音频DAC输出端的平滑滤波器,或音频ADC输入端的抗混叠滤波器方面,是一种出色的选择。贝塞尔滤波器还可用于分析D类放大器的输出,以及消除其它应用中的开关噪声,来提高失真测量和示波器波形测量的精确度。

                                                 https://gss1.bdstatic.com/-vo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=b30c5bd0be1c8701c2bbbab44616f54a/2fdda3cc7cd98d109c96e9052c3fb80e7bec9040.jpg

[b,a] = besself(n,Wn)                   %低通滤波器(Wn为二元向量时,为带通)

                                                     % Wn是一个实际频率值,不是相对量

[b,a] = besself(n,Wn,’ftype’);        % ftype类型low,hight,stop

dataOut = filter(b,a,dataIn);          %信号滤波运算

四种滤波器的区别对比

①贝塞尔滤波器具有最平坦的幅度和相位响应。带通(通常为用户关注区域)的相位响应近乎呈线性。

②巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。

③切比雪夫滤波器在过渡带比巴特沃斯滤波器的衰减快,但频率响应的幅频特性不如后者平坦。切比雪夫滤波器和理想滤波器的频率响应曲线之间的误差最小,但是在通频带内存在幅度波动。

④相同阶数时:椭圆滤波器的幅频曲线下降最陡,其次为切比雪夫滤波器,再次为巴特沃斯滤波器,下降最平缓的为贝塞尔滤波器。

⑤相同阶数时:巴特沃斯滤波器通带最平坦,阻带下降慢;切比雪夫滤波器通带等纹波,阻带下降较快;贝塞尔滤波器通带等纹波,阻带下降慢。也就是说幅频特性的选频特性最差。但是,贝塞尔滤波器具有最佳的线性相位特性;椭圆滤波器在通带等纹波(阻带平坦或等纹波),阻带下降最快。

转插两篇他人博客供大家参考:

博客地址  http://blog.sina.com.cn/s/blog_49c02a8c0100yszh.html (matlab提供了简便的产生各种滤波器的方法)

                https://blog.csdn.net/LYduring/article/details/80443573   (几种常见空间滤波器MATLAB实现)

                https://blog.csdn.net/colapin/article/details/52840075   (七种滤波方法的matlab实现和测试)

                https://www.cnblogs.com/alimy/p/9140695.html  (切比雪夫Ⅰ型滤波器设计:低通、高通、带通和带阻)

% Cheby1Filter.m % 切比雪夫Ⅰ型滤波器的设计 % clear; close all; clc; fs = 1000; %Hz 采样频率 Ts = 1/fs; N = 1000; %序列长度 t = (0:N-1)*Ts; delta_f = 1*fs/N; f1 = 50; f2 = 100; f3 = 200; f4 = 400; x1 = 2*0.5*sin(2*pi*f1*t); x2 = 2*0.5*sin(2*pi*f2*t); x3 = 2*0.5*sin(2*pi*f3*t); x4 = 2*0.5*sin(2*pi*f4*t); x = x1 + x2 + x3 + x4; %待处理信号由四个分量组成 X = fftshift(abs(fft(x)))/N; X_angle = fftshift(angle(fft(x))); f = (-N/2:N/2-1)*delta_f; figure(1); subplot(3,1,1); plot(t,x); title('原信号'); subplot(3,1,2); plot(f,X); grid on; title('原信号频谱幅度特性'); subplot(3,1,3); plot(f,X_angle); title('原信号频谱相位特性'); grid on; %设计一个切比雪夫低通滤波器,要求把50Hz的频率分量保留,其他分量滤掉 wp = 55/(fs/2); %通带截止频率,取50~100中间的值,并对其归一化 ws = 90/(fs/2); %阻带截止频率,取50~100中间的值,并对其归一化 alpha_p = 3; %通带允许最大衰减为 db alpha_s = 40;%阻带允许最小衰减为 db %获取阶数和截止频率 [ N1 wc1 ] = cheb1ord( wp , ws , alpha_p , alpha_s); %获得转移函数系数 [ b a ] = cheby1(N1,alpha_p,wc1,'low'); %滤波 filter_lp_s = filter(b,a,x); X_lp_s = fftshift(abs(fft(filter_lp_s)))/N; X_lp_s_angle = fftshift(angle(fft(filter_lp_s))); figure(2); freqz(b,a); %滤波器频谱特性 figure(3); subplot(3,1,1); plot(t,filter_lp_s); grid on; title('低通滤波后时域图形'); subplot(3,1,2); plot(f,X_lp_s); title('低通滤波后频域幅度特性'); subplot(3,1,3); plot(f,X_lp_s_angle); title('低通滤波后频域相位特性'); %设计一个高通滤波器,要求把400Hz的频率分量保留,其他分量滤掉 wp = 350/(fs/2); %通带截止频率,取200~400中间的值,并对其归一化 ws = 380/(fs/2); %阻带截止频率,取200~400中间的值,并对其归一化 alpha_p = 3; %通带允许最大衰减为 db alpha_s = 20;%阻带允许最小衰减为 db %获取阶数和截止频率 [ N2 wc2 ] = cheb1ord( wp , ws , alpha_p , alpha_s); %获得转移函数系数 [ b a ] = cheby1(N2,alpha_p,wc2,'high'); %滤波 filter_hp_s = filter(b,a,x); X_hp_s = fftshift(abs(fft(filter_hp_s)))/N; X_hp_s_angle = fftshift(angle(fft(filter_hp_s))); figure(4); freqz(b,a); %滤波器频谱特性 figure(5); subplot(3,1,1); plot(t,filter_hp_s); grid on; title('高通滤波后时域图形'); subplot(3,1,2); plot(f,X_hp_s); title('高通滤波后频域幅度特性'); subplot(3,1,3); plot(f,X_hp_s_angle); title('高通滤波后频域相位特性'); %设计一个带通滤波器,要求把50Hz和400Hz的频率分量滤掉,其他分量保留 wp = [65 385 ] / (fs/2); %通带截止频率,50~100、200~400中间各取一个值,并对其归一化 ws = [75 375 ] / (fs/2); %阻带截止频率,50~100、200~400中间各取一个值,并对其归一化 alpha_p = 3; %通带允许最大衰减为 db alpha_s = 20;%阻带允许最小衰减为 db %获取阶数和截止频率 [ N3 wn ] = cheb1ord( wp , ws , alpha_p , alpha_s); %获得转移函数系数 [ b a ] = cheby1(N3,alpha_p,wn,'bandpass'); %滤波 filter_bp_s = filter(b,a,x); X_bp_s = fftshift(abs(fft(filter_bp_s)))/N; X_bp_s_angle = fftshift(angle(fft(filter_bp_s))); figure(6); freqz(b,a); %滤波器频谱特性 figure(7); subplot(3,1,1); plot(t,filter_bp_s); grid on; title('带通滤波后时域图形'); subplot(3,1,2); plot(f,X_bp_s); title('带通滤波后频域幅度特性'); subplot(3,1,3); plot(f,X_bp_s_angle); title('带通滤波后频域相位特性'); %设计一个带阻滤波器,要求把50Hz和400Hz的频率分量保留,其他分量滤掉 wp = [65 385 ] / (fs/2); %通带截止频率?,50~100、200~400中间各取一个值,并对其归一化 ws = [75 375 ] / (fs/2); %阻带截止频率?,50~100、200~400中间各取一个值,并对其归一化 alpha_p = 3; %通带允许最大衰减为 db alpha_s = 20;%阻带允许最小衰减为 db %获取阶数和截止频率 [ N4 wn ] = cheb1ord( wp , ws , alpha_p , alpha_s); %获得转移函数系数 [ b a ] = cheby1(N4,alpha_p,wn,'stop'); %滤波 filter_bs_s = filter(b,a,x); X_bs_s = fftshift(abs(fft(filter_bs_s)))/N; X_bs_s_angle = fftshift(angle(fft(filter_bs_s))); figure(8); freqz(b,a); %滤波器频谱特性 figure(9); subplot(3,1,1); plot(t,filter_bs_s); grid on; title('带阻滤波后时域图形'); subplot(3,1,2); plot(f,X_bs_s); title('带阻滤波后频域幅度特性'); subplot(3,1,3); plot(f,X_bs_s_angle); title('带阻滤波后频域相位特性');

效果:

原始信号:

                       

生成的低通滤波器和滤波后的效果:

                                   

                        

生成的高通滤波器和滤波后的结果:

                                

                          

生成的带通滤波器和滤波后的结果:

                               

                           

生成的带阻滤波器和滤波后的结果:

                                      

                              



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3